package common.fengkai.filepost.utils.ofd;

import java.io.File;

import common.fengkai.filepost.conf.PaperlessConfig;
import org.apache.commons.io.FileUtils;

import cfca.paperless.client.bean.SignAppearance;
import cfca.paperless.client.servlet.PaperlessClient;

import cfca.paperless.util.Base64;
import cfca.paperless.util.GUID;
import cfca.paperless.util.IoUtil;
import cfca.paperless.util.StringUtil;

/**
 * @Description ofd自动化签章接口，使用示例。 1，操作对象为本地待处理的单个ofd文件。 2，使用服务端管理页面中预先制作的印章进行签章。
 *              3，签章类型支持2种，2=坐标签章,3=关键字签章 4，返回成功签章的ofd文件。
 * 
 * @Author dell
 * @Date 2016-5-13
 * @CodeReviewer TODO
 */
public class SealAutoOfdTest01 {

	public static void main(String[] args) throws Exception {

		long timeStart = System.currentTimeMillis();// 开始时间

		System.out.println("SealAutoOfdTest01 START");

		PaperlessClient clientBean = new PaperlessClient(PaperlessConfig.url, 10000, 60000);// 无纸化基本接口的访问URL

		// **********************待计算hash的ofd文件
		String filePath = "H:\\项目文档\\cfca\\无纸化OFD升级材料\\程序\\Client程序\\Java\\TestData\\无章.ofd";
		String ofdSuffix = IoUtil.getFileNameSuffix(filePath);
		if (!PaperlessConfig.OFD_FILE_SUFFIX.equals(ofdSuffix)) {
			throw new Exception("所选文件不是ofd文件");
		}
		byte[] ofd = FileUtils.readFileToByteArray(new File(filePath));

		// **********************签章位置
		SignAppearance appearance = new SignAppearance();
		// 页码
		appearance.setPageNo(2);
		// 坐标
		appearance.setX(50);
		appearance.setY(50);
		// 关键字 (当pageNo没有该关键字时，会在该页码左上角签章)
//		appearance.setKeyword("软件安装");
		
		// 印模显示高度宽度
		appearance.setImageDisplayHeight(50);
		appearance.setImageDisplayWidth(50);

		// **********************本机构印章编码、印章证书id（sealCertId的证书不可为sealCode的印章证书）
		String sealCode = "yz2021051286034968";
		String password = "tp@test1234";
		String isEncrypt = "false";

		// **********************操作员编码或者机构号
		String operatorCode = PaperlessConfig.operatorCode;
		// **********************渠道编码，可以为空
		String channelCode = PaperlessConfig.channelCode;
		// **********************业务流水号
		String systemNo = GUID.generateId();

		// **********************获取时间戳的方式。默认值为0。0：实时访问CFCA
		// 时间戳服务；1：使用从CFCA购置并在本地部署的时间戳服务器产品；
		String timestampChannel = "0";

		// 保存临时表id
		String savedOfdId = GUID.generateId();
		System.out.println(System.getProperty("java.classpath"));
		// 取得签章后的PDF文件数据
		String result = clientBean.sealAutoOfd(systemNo, ofd, appearance, sealCode, password,
				 timestampChannel, savedOfdId, isEncrypt, operatorCode, "");

		String code = StringUtil.getNodeText(result, "Code");
		// 处理结果为正常，保存签章后的OFD文件到本地目录下
		if ("200".equals(code)) {
			System.out.println("SealAutoOfdTest01 END OK");
			String ofdBase64 = StringUtil.getNodeText(result, "Ofd");
			String savePath = "./TestData/output/SealAutoOfdTest02.ofd";
			IoUtil.write(savePath, Base64.decode(ofdBase64));
			System.out.println("签章后的OFD文件已保存到：" + savePath);
		} else {
			// 处理结果为异常，打印出错误码和错误信息
			System.out.println("SealAutoOfdTest01 END NG");
			System.out.println(result);
		}

		long timeEnd = System.currentTimeMillis();// 结束时间
		System.out.println("##########" + "time used:" + (timeEnd - timeStart) + "##########");
	}

}
